package com.qidianit.mes.pro.controller;

import com.github.pagehelper.PageInfo;
import com.qidianit.mes.pojo.Result;
import com.qidianit.mes.pojo.pro.Workflow;
import com.qidianit.mes.pro.service.WorkflowService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 工艺流程管理控制器
 * 处理工艺流程相关的HTTP请求，提供RESTful接口
 */
@RestController
@RequestMapping("/workflow") // 接口统一前缀，与工艺流程业务对应
public class WorkflowController {

    @Autowired
    private WorkflowService workflowService;

    @GetMapping("/selectByMaterialCode")
    public Result<List<Workflow>> selectByMaterialCode(String materialCode){
        return workflowService.selectListByMaterialCode(materialCode);
    };

    /**
     * 批量删除工艺流程（逻辑删除）
     * 请求方式：DELETE
     * 请求路径：/workflow/batchDelete
     * 请求参数：ids（工艺流程ID数组，如 ?ids=1&ids=2&ids=3）
     * @param id 待删除的工艺流程ID数组
     * @return 批量删除操作结果
     */
    @DeleteMapping("/batchDelete")
    public Result batchDelete(Long[] id) {
        return workflowService.batchDelete(id);
    }

    /**
     * 根据ID删除单个工艺流程（逻辑删除）
     * 请求方式：DELETE
     * 请求路径：/workflow/delete/{id}（路径参数传递ID）
     * @param id 待删除的工艺流程ID
     * @return 单个删除操作结果
     */
    @DeleteMapping("/delete/{id}")
    public Result deleteById(@PathVariable Long id) {
        return workflowService.deleteById(id);
    }

    /**
     * 更新工艺流程信息
     * 请求方式：PUT
     * 请求路径：/workflow/update
     * 请求体：JSON格式的工艺流程信息（必须包含ID，用于定位待更新记录）
     * @param workflow 待更新的工艺流程信息（含ID）
     * @return 更新操作结果
     */
    @PutMapping("/update")
    public Result update(@RequestBody Workflow workflow) {
        return workflowService.updateById(workflow);
    }

    /**
     * 新增工艺流程
     * 请求方式：POST
     * 请求路径：/workflow/add
     * 请求体：JSON格式的工艺流程信息（不含ID，ID由数据库自增生成）
     * @param workflow 待新增的工艺流程信息（不含ID）
     * @return 新增操作结果
     */
    @PostMapping("/add")
    public Result save(@RequestBody Workflow workflow) {
        return workflowService.saveWorkflow(workflow);
    }

    /**
     * 根据工艺流程编号精确查询单个工艺流程
     * 请求方式：GET
     * 请求路径：/workflow/code/{workflowCode}（路径参数传递编号）
     * @param workflowCode 待查询的工艺流程编号（唯一）
     * @return 单个工艺流程的详情结果
     */
    @GetMapping("/code/{workflowCode}")
    public Result<Workflow> getByCode(@PathVariable("workflowCode") String workflowCode) {
        return workflowService.selectByCode(workflowCode);
    }

    /**
     * 分页查询工艺流程列表（多条件筛选）
     * 请求方式：GET
     * 请求路径：/workflow/page
     * 请求参数：
     *   - workflow：筛选条件（如 workflowCode、workflowName、status）
     *   - pageNum：页码（默认1）
     *   - pageSize：每页条数（默认10）
     * @param workflow 筛选条件封装
     * @param page 页码
     * @param size 每页条数
     * @return 分页查询结果（含列表数据、总条数、总页数等）
     */
    @GetMapping("/page")
    public Result<PageInfo<Workflow>> list(
            Workflow workflow,
            @RequestParam(defaultValue = "1") int page,
            @RequestParam(defaultValue = "10") int size) {
        return workflowService.selectList(workflow, page, size);
    }
}